package com.berchen.数据结构.二叉树.线索二叉树;

/**
 * 线索二叉树
 *
 * 一个二叉树 的 叶子节点的左右指针是没有指向的  这就造成了浪费
 * 我们根据该节点的某种顺（前、中、后）序输出方式 将空指针指向前驱节点和后继节点
 *
 * 当线索化二叉树后，节点的属性left right 有如下情况：
 * left指向的是左子树 或者指向的是前驱节点
 * right指向的是右子树 或者指向的是后继节点
 *
 */
public class ThreadedBinaryTree {

    public static void main(String[] args){
        TreeNode root=new TreeNode(1,"chen1");
        TreeNode node2=new TreeNode(3,"chen1");
        TreeNode node3=new TreeNode(6,"chen1");
        TreeNode node4=new TreeNode(8,"chen1");
        TreeNode node5=new TreeNode(10,"chen1");
        TreeNode node6=new TreeNode(14,"chen1");

        root.setLeft(node2);
        root.setRight(node3);
        node2.setLeft(node4);
        node2.setRight(node5);
        node3.setLeft(node6);



        BinaryTree binaryTree = new BinaryTree();
        binaryTree.root=root;
        // 中序线索化
//        binaryTree.innOrder();
//
//        System.out.println(node5.getLeft());
//        System.out.println(node5.getRight());
//
//        System.out.println("-----------------");
//        binaryTree.innList();
        // 前序线索化
//        binaryTree.preOrder();
//        System.out.println(node5.getLeft());
//        System.out.println(node5.getRight());
//        System.out.println("--------");
//        binaryTree.preList();

        // 后序线索化
        binaryTree.sufOrder();
        System.out.println(node5.getLeft());
        System.out.println(node5.getRight());
        System.out.println("--------");
        node2.setParent(root);
        node3.setParent(root);
        node4.setParent(node2);
        node5.setParent(node2);
        node6.setParent(node3);
        binaryTree.sufList();

    }
}
